let range = {
    from: 1,
    to: 5,

    [Symbol.iterator]() {
        this.current = this.from;
        return this;
    },

    next() {
        if (this.current <= this.to) {
            return {done: false, value: this.current++};
        }else {
            return {done: true};
        }
    }
};

// 本实现中，range[Symbol.iterator] 返回的是range对象自身，它包括了必须的next()方法
// 缺点：现在不可能同时在一个range对象上运行两个for...of循环了

for (let num of range) {
    alert(num);
}